\subsection{Patrones utilizados.}

Los patrones más importantes utilizados en nuestro proyecto son {\em Singleton}
y {\em State}.

El {\em Singleton} se usa para tener una sóla instancia, accesible desde
cualquier parte, de recursos como el nodo Root de Ogre, el SceneManager y los
estados de juego.

El uso del patrón {\em State} puede verse representado en el diagrama
\ref{estados}. Todos los estados implementan la clase abstracta {\em
GameState}.

\begin{figure}[h]
\centering
\includegraphics[width = 12 cm]{estados.eps}
\caption{Diagrama de clases de los estados de juego.}
\label{estados}
\end{figure}

La clase {\em GameManager} (ver figura \ref{GameManager}) hace de todos los
posibles {\em Listeners}, ejecutando cada estado con una instancia de {\em
GameState}

\begin{figure}[h]
\centering
\includegraphics[width = 12 cm]{GameManager.eps}
\caption{Diagrama de clases de {\em GameManager}.}
\label{GameManager}
\end{figure}

{\em GameManager} funciona como si fuese una pila de estados, de forma que
siempre se ejecutan los métodos de los listeners (frameStarted, frameEnded,
keyPressed, etc) del estado que se encuentra en la cima de la pila, y los
cambios de estado funcionan apilando y desapilando los estados. Esto hace muy
cómodo cambiar de un estado a otro cuando el estado anterior no ha terminado
(por ejemplo, del estado de juego al de pausa, ya que cuando se cancela la
pausa hay que volver al estado del juego justo donde estaba).
